<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>

    // 传统的对象 键名都是字符串类型
    var zhang = {
        name:"张三",
        age:18,
        say:function(){
            console.log(this.name,this.age);
        }
    }

    // 如果用其他类型作为对象的键名 => 有什么效果?  => 默认转化为字符串类型

    var arr = [1,2,3];
    var obj = {a:1,b:2};
    var div = document.createElement("div");

    zhang[100] = 200;
    zhang[true]  = false;
    zhang[null] = undefined;

    zhang[arr] = arr;
    zhang[obj] = obj;
    zhang[div] = div;

    console.log(zhang);

    for(var key in zhang){
        console.log(key);
    }

    // 为了解决这个问题，ES6 提供了 Map 数据结构。它类似于对象，也是键值对的集合，但是“键”的范围不限于字符串，各种类型的值（包括对象）都可以当作键。也就是说，Object 结构提供了“字符串—值”的对应，Map 结构提供了“值—值”的对应，是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构，Map 比 Object 更合适。
    



</script>
</html>